
package peinstellungen

import java.util.logging.Logger;
import src.de.checker.hochzeit.util.*;
import src.de.checker.hochzeit.domain.util.*;
import src.de.checker.hochzeit.domain.user.*;
import src.de.checker.hochzeit.domain.ideen.*;
import src.de.checker.hochzeit.konstanten.*
import com.google.appengine.api.datastore.*
import static com.google.appengine.api.datastore.FetchOptions.Builder.*
import org.apache.commons.codec.digest.DigestUtils;
/**
 * Portal-Einstellungen
 */
Logger log = Logger.getLogger('P_EinstellungenController');

if(session.getAttribute(Konstanten.SESSION_USER) != null)
{
	def user = session.getAttribute(Konstanten.SESSION_USER)

	if(params?.index ==~ /(?i)true/)
	{
		index()
	}
	if(params?.kontakt ==~ /(?i)true/)
	{
		kontakt()
	}
	if(params?.portal ==~ /(?i)true/)
	{
		portal()
	}
	if(params?.updateadresse ==~ /(?i)true/)
	{
		updateadresse()
	}
	if(params?.updatekontakt ==~ /(?i)true/)
	{
		updatekontakt()
	}
	if(params?.updatezusage ==~ /(?i)true/)
	{
		updatezusage()
	}
	if(params?.updateportaldaten ==~ /(?i)true/)
	{
		updateportaldaten()
	}
	if(params?.updatepasswort ==~ /(?i)true/)
	{
		updatepasswort()
	}
	if(params?.updatekinder ==~ /(?i)true/)
	{
		updatekinder()
	}
	if(params?.updateanhang ==~ /(?i)true/)
	{
		updateanhang()
	}
}
/**
 * Sucht zum angemeldeten Benutzer die Adressdaten und TELEKOMM Daten
 */
private void generate()
{
	def user = session.getAttribute(Konstanten.SESSION_USER)
	def item = datastore.get(user.key);
	if(item.strasse == null)
		item.strasse = ''
	if(item.plz == null)
		item.plz = ''
	if(item.ort == null)
		item.ort = ''
				
	request['gast'] = item
	
	def query = new Query(Konstanten.TELEKOMM)
	query.addFilter("gast", Query.FilterOperator.EQUAL, user.key.id)
	
	PreparedQuery preparedQuery = datastore.prepare(query)
 	def entities = preparedQuery.asList( withLimit(20) )
	
 	for (i in entities)
	{
		if(i.typ == 0)
		{
			request['email'] = i
		}
		if(i.typ == 1)
		{
			request['handy'] = i
		}
		if(i.typ == 2)
		{
			request['telefon'] = i
		}
	}
}
private void portal()
{
	generate()
	forward '/peinstellungen/portal.gtpl'
}
private void kontakt()
{
	generate()
	forward '/peinstellungen/kontakt.gtpl'
}
/**
 * Sucht zum angemeldeten Benutzer die Kinder und Anhänge
 */
private void index()
{
	generate()
	def myuser = session.getAttribute(Konstanten.SESSION_USER)
	
	def query1 = new Query(Konstanten.KIND)
    query1.addFilter("feier", Query.FilterOperator.EQUAL, myuser.feier)
	query1.addFilter("gast", Query.FilterOperator.EQUAL, myuser.key.id)
	PreparedQuery preparedQuery1 = datastore.prepare(query1)
	def entities1 = preparedQuery1.asList( withLimit(100) )
	request['kinder'] = entities1
	
	def query2 = new Query(Konstanten.ANHANG)
    query2.addFilter("feier", Query.FilterOperator.EQUAL, myuser.feier)
    query2.addFilter("gast", Query.FilterOperator.EQUAL, myuser.key.id)
	PreparedQuery preparedQuery2 = datastore.prepare(query2)
	def entities2 = preparedQuery2.asList( withLimit(100) )
	request['anhang'] = entities2
	
	forward '/peinstellungen/uebersicht.gtpl'
}
/**
 * Aktualisiert die Kinder des angemeldeten Benutzers
 */
private void updatekinder()
{
	def gast = session.getAttribute(Konstanten.SESSION_USER)
	
	//System.out.println(params)
		
	try
	{
		Key k = KeyFactory.stringToKey(params.key)
		def entity = datastore.get(k);
		if(entity.gast.equals(gast.key.id))
		{
			boolean changed = false
			String message = ''
			if(params.name != null && !params.name.equalsIgnoreCase(entity.name))
			{
				message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat den Namen seines Kindes aktualisiert. \n\nBisheriger Name: '+entity.name+'\nNeuer Name: '+params.name+'\n\n'
				String messagex = 'UPDATE: Der Benutzer hat den Namen seines Kindes '+entity.key+' aktualisiert von '+entity.name+' auf '+params.name
			   
				changed = true
			}
			if(params.anmerkung != null && !params.anmerkung.equalsIgnoreCase(entity.anmerkung) && !params.anmerkung.equalsIgnoreCase('null'))
			{
				String bisher = ''
				if(entity.anmerkung)
					bisher = entity.anmerkung
				message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat die Anmerkung zu seinem Kind aktualisiert. \n\nBisherige Anmerkung: '+bisher+'\nNeue Anmerkung: '+params.anmerkung+'\n\n'
				
				entity.anmerkung = params.anmerkung
				changed = true
			}
			if(params.alter != null)
			{
				try
				{
					Long alter = new Long(params.alter)
					if(!alter.equals(entity.alter))
					{
						message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat das Alter seines Kindes aktualisiert. \n\nBisheriges Alter: '+entity.alter+'\nNeues Alter: '+params.alter+'\n\n'
						
						entity.alter = alter
						changed = true
					}
				}
				catch(Exception e){}
				
			}
			if(changed)
			{
				entity.save()
				try
				{
					createTracer(Konstanten.TRACER_UPDATE ,message)
				}
				catch(Exception e)
				{
					try
					{
						createTracer(Konstanten.TRACER_UPDATE , 'Daten des Kindes aktualisiert')
					}
					catch(Exception e1){}
					
				}
				sendMail("Aktualisierung der Kinder von "+gast.anzeigename,message, new Long(4))
				request.message = 'Daten des Kindes '+entity.name+' aktualisiert'
			}
		}
		else
		{
			String message = 'Der Benutzer versucht ein Kind zu updaten, dass nicht sein eigenes ist: '+entity
		    createTracer(Konstanten.TRACER_VERBOTEN, message)
			log.warning('Der Gast '+gast+' versucht ein Kind zu updaten, dass nicht zu ihm gehört: '+entity)
		}
	}
	catch(Exception e)
	{
		String messageq = 'Es wurde versucht ein Kind zu updaten, das es nicht gibt. params.key: '+params.key
		createTracer(Konstanten.TRACER_VERBOTEN, messageq)
		log.warning(e.toString())
		log.warning("einstellungen.updatekinder(): Kind nicht gefunden zum updaten. Benutzer der gesucht hat: "+gast)
		index()
	}
	index()
}
/**
 * Aktualisiert den Anhang des angemeldeten Benutzers
 */
private void updateanhang()
{
	def gast = session.getAttribute(Konstanten.SESSION_USER)
	try
	{
		Key k = KeyFactory.stringToKey(params.key)
		def entity = datastore.get(k);
		if(entity.gast.equals(gast.key.id))
		{
			boolean changed = false
			String message = ''
			if(params.name != null && !params.name.equalsIgnoreCase(entity.name))
			{
				message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat den Namen seines Anhangs aktualisiert. \n\nBisheriger Name: '+entity.name+'\nNeuer Name: '+params.name+'\n\n'
				entity.name = params.name
				changed = true
			}
			if(params.anmerkung != null && !params.anmerkung.equalsIgnoreCase(entity.anmerkung) && !params.anmerkung.equalsIgnoreCase('null'))
			{
				String bisher = ''
				if(entity.anmerkung)
					bisher = entity.anmerkung
				message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat die Anmerkung zu seiner Begleitung aktualisiert. \n\nBisherige Anmerkung: '+bisher+'\nNeue Anmerkung: '+params.anmerkung+'\n\n'
				entity.anmerkung = params.anmerkung
				changed = true
			}
			if(changed)
			{
				entity.save()
				try
				{
					createTracer(Konstanten.TRACER_UPDATE , message)
				}
				catch(Exception e)
				{
					try
					{
						createTracer(Konstanten.TRACER_UPDATE , 'Daten der Begleitung aktualisiert')
					}
					catch(Exception e1){}
					
				}
				sendMail("Aktualisierung der Begleitung von "+gast.anzeigename,message, new Long(5))
				request.message = 'Daten der Begleitung '+entity.name+' aktualisiert'
			}
		}
		else
		{
			String message = 'Der Benutzer versucht eine Begleitung zu updaten, die nicht zu ihm gehört: '+entity
			createTracer(Konstanten.TRACER_VERBOTEN,message)
			log.warning('Der Gast '+gast+' versucht ein Anhang zu updaten, dar nicht zu ihm gehört: '+entity)
		}
	}
	catch(Exception e)
	{
		String messageq = 'Es wurde versucht ein Anhang zu updaten, den es nicht gibt. params.key: '+params.key
		createTracer(Konstanten.TRACER_VERBOTEN, messageq)
		log.warning(e.toString())
		log.warning("einstellungen.updateanhang(): Anhang nicht gefunden zum updaten. Benutzer der gesucht hat: "+gast)
		index()
	}
	index()
}
private void updatekontakt()
{
	String message = ''
	String messager = ''
	def gast = session.getAttribute(Konstanten.SESSION_USER)

	boolean aktualisiert = false
	String altedaten = ''
	String neuedaten = ''
	
	try
	{
		//E-Mail
		if(params.email)
		{
			if(!params.email.contains('@'))
			{
				messager = 'Keine gültige E-Mail Adresse. '
			}
			else
			{
				if(params.keye) // Es existiert schon ein Eintrag für die Mailadresse
				{
					try
					{
						Key ke = KeyFactory.stringToKey(params.keye)
						def altemail = datastore.get(ke);
						
						altedaten +='E-Mail: '+altemail.wert
						neuedaten +='E-Mail: '+params.email
							
						if(!altemail.wert.equals(params.email))
						{
							message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat seine E-Mail Adresse aktualisiert. \n\nBisherige E-Mail Adresse: '+altemail.wert+'\nNeue E-Mail: '+params.email+'\n\n';
							altemail.wert = params.email
							altemail.save()
							aktualisiert = true
						}
					}
					catch(Exception ex)
					{
						String messageq = 'Es wurde versucht eine Mailadresse zu updaten, den es nicht gibt. params.keye: '+params.keye
						createTracer(Konstanten.TRACER_VERBOTEN, messageq)
						log.warning(e.toString())
						log.warning("einstellungen.editkontakt(): VERBOTEN: Es wurde versucht eine Mailadresse zu updaten, den es nicht gibt. Benutzer der gesucht hat: "+gast+" Params: "+params)
					}
				}
				else
				{
					altedaten +='E-Mail: -'
					neuedaten +='E-Mail: '+params.email
						
					Telekomm t = new Telekomm()
					t.typ = new Long(0)
					t.gast = gast.key.id
					t.wert = params.email
						
					Entity e = t as Entity
					e.save()
					aktualisiert = true
					message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat eine E-Mail Adresse eingetragen. \n\nBisher war dem System keine E-Mail Adresse bekannt.\nNeue E-Mail: '+params.email+'\n\n';
					
				}
			}
		}
		//Telefon
		if(params.telefon)
		{
			if(params.keyt) // Es existiert schon ein Eintrag für die Telefonnummer
			{
				try
				{
					Key kt = KeyFactory.stringToKey(params.keyt)
					def altemail = datastore.get(kt);
						
					altedaten +=' Telefon: '+altemail.wert
					neuedaten +=' Telefon: '+params.telefon
						
					if(!altemail.wert.equalsIgnoreCase(params.telefon))
					{
						message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat seine Telefonnummer aktualisiert. \n\nBisherige Telefonnummer: '+altemail.wert+'\nNeue Telefonnummer: '+params.telefon+'\n\n';
						altemail.wert = params.telefon
						altemail.save()
						aktualisiert = true
					}
				}
				catch(Exception ex)
				{
					String messageq = 'Es wurde versucht eine Telefonnummer zu updaten, den es nicht gibt. params.keyt: '+params.keyt
					createTracer(Konstanten.TRACER_VERBOTEN, messageq)
					log.warning(e.toString())
					log.warning("einstellungen.editkontakt(): VERBOTEN: Es wurde versucht eine Telefonnummer zu updaten, den es nicht gibt. Benutzer der gesucht hat: "+gast+" Params: "+params)
				}

			}
			else
			{
				altedaten +=' Telefon: -'
				neuedaten +=' Telefon: '+params.telefon
				Telekomm t = new Telekomm()
				t.typ = new Long(2)
				t.gast = gast.key.id
				t.wert = params.telefon
					
				Entity e = t as Entity
				e.save()
				aktualisiert = true
				message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat eine Telefonnummer eingetragen. \n\nBisher war dem System keine Telefonnummer bekannt.\nNeue Nummer: '+params.telefon+'\n\n';
				
			}
		}
		//Handy
		if(params.handy)
		{
			if(params.keyh) // Es existiert schon ein Eintrag für die Handynummer
			{
				try
				{
					Key kh = KeyFactory.stringToKey(params.keyh)
					def altemail = datastore.get(kh);
					
					altedaten +=' Handy: '+altemail.wert
					neuedaten +=' Handy: '+params.handy
						
					if(!altemail.wert.equalsIgnoreCase(params.handy))
					{
						message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat seine Handynummer aktualisiert. \n\nBisherige Handynummer: '+altemail.wert+'\nNeue Handynummer: '+params.handy+'\n\n';
						altemail.wert = params.handy
						altemail.save()
						aktualisiert = true
					}
				}
				catch(Exception ex)
				{
					String messageq = 'Es wurde versucht eine Handynummer zu updaten, den es nicht gibt. params.keyh: '+params.keyh
					createTracer(Konstanten.TRACER_VERBOTEN, messageq)
					log.warning(e.toString())
					log.warning("einstellungen.editkontakt(): VERBOTEN: Es wurde versucht eine Handynummer zu updaten, den es nicht gibt. Benutzer der gesucht hat: "+gast+" Params: "+params)
				}
			}
			else
			{
				altedaten +=' Handy: -'
				neuedaten +=' Handy: '+params.handy
				
				Telekomm t = new Telekomm()
				t.typ = new Long(1)
				t.gast = gast.key.id
				t.wert = params.handy
					
				Entity e = t as Entity
				e.save()
				aktualisiert = true
				message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat eine Handynummer eingetragen. \nBisher war dem System keine Handynummer bekannt.\nNeue Nummer: '+params.handy+'\n\n';
				
			}
		}
		if(aktualisiert)
		{
			sendMail("Aktualisierung Kontaktdaten von "+gast.anzeigename, message, new Long(1))
			messager += 'Kontaktdaten aktualisiert.'
			//Logeintrag schreiben
			String messagex = 'Kontaktdaten. Alte Daten: '+altedaten+' Neue Daten:'+neuedaten
		    createTracer(Konstanten.TRACER_UPDATE, messagex)
		}
				
		if(!messager.equals(''))
			request.message = messager
	}
	catch(Exception e)
	{
		log.warning(e.toString())
	}
	
	kontakt()
}
private void updateadresse()
{
	def gast = session.getAttribute(Konstanten.SESSION_USER)
	try
	{
		String alteadresse = gast.strasse+", "+gast.plz+" "+gast.ort
		String neueadresse = params.strasse+", "+params.plz+" "+params.ort
		String error = ''
		boolean valid = true
			
		if(params.strasse == null || params.strasse.equalsIgnoreCase(''))
		{
			valid = false
			error +='Bitte Straße angeben. '
		}
		if(params.plz == null || params.plz.equalsIgnoreCase(''))
		{
			valid = false
			error +='Bitte Postleitzahl angeben. '
		}
		else if(params.plz.length() != 5)
		{
			valid = false
			error +='Ungültige Postleitzahl. '
		}
		else
		{
			try
			{
				Long test = new Long(params.plz)
			}
			catch(Exception e)
			{
				valid = false
				error +='Ungültige Postleitzahl. '
			}
		}
		if(params.ort == null || params.ort.equalsIgnoreCase(''))
		{
			valid = false
			error +='Bitte Ort angeben. '
		}
		if(!valid)
		{
			request.message = error
			generate()
			request.gast.strasse = params.strasse
			request.gast.plz = params.plz
			request.gast.ort = params.ort
			forward '/peinstellungen/kontakt.gtpl'
		}	
		else
		{
			boolean aktualisiert = false
			String message=''
			if(!(gast.strasse.equals(params.strasse) 
					&& gast.ort.equals(params.ort) 
					&& gast.plz.equals(params.plz)))
			{
				message += 'Der Benutzer '+gast.vorname+' '+gast.nachname+' hat seine Adresse aktualisiert. \n\nBisherige Adresse: '+gast.strasse+', '+gast.plz+' '+gast.ort+'\nNeue Adresse: '+params.strasse+', '+params.plz+' '+params.ort+'\n\n'
					
				gast.strasse = params.strasse
				gast.plz = params.plz
				gast.ort = params.ort
				gast.save()
				//Logeintrag schreiben
				String messagex = 'Adressdaten. Alte Adresse: '+alteadresse+' Neue Adresse: '+neueadresse
				createTracer(Konstanten.TRACER_UPDATE , messagex)
				
				aktualisiert = true
			}	
		   	if(aktualisiert)
			{
		   		sendMail("Aktualisierung Adressdatendaten von "+gast.anzeigename,message, new Long(2))
				
				request.message = 'Adressdaten aktualisiert'
			}
				
		    kontakt()
		}
	}
	catch(Exception e)
	{
		log.warning(e.toString())
		kontakt()
	}
	
}
private void updateportaldaten()
{
	def gast = session.getAttribute(Konstanten.SESSION_USER)
	try
	{
		String m1 = ''
		String m2 = ''
		boolean changed = false
		
		//anzeigename wurde aktualisiert
		if(params.anzeigename != null && !params.anzeigename.equalsIgnoreCase('') && !gast.anzeigename.equals(params.anzeigename))
		{
			m1 = 'Anzeigename von Gast: '+gast+' aktualisiert von '+gast.anzeigename+' auf '+params.anzeigename
			gast.anzeigename = params.anzeigename
			changed = true
		}
		//loginname wurde aktualisiert - deaktiviert
		if(params.loginname != null && !params.loginname.equalsIgnoreCase('') && !gast.loginname.equals(params.loginname))
		{
			def query = new Query(Konstanten.GAST)
			query.addFilter("loginname", Query.FilterOperator.EQUAL, params.loginname)
			PreparedQuery preparedQuery = datastore.prepare(query)
		 	List<Entity> entities = preparedQuery.asList( withLimit(1) )
			 	
		 	//Es gibt bereits einen Nutzer mit diesem Loginnamen
			if(entities != null && entities.size() > 0)
			{
				Entity bekannt = entities.get(0);
				if(bekannt.key.compareTo(k) == 0) // Gehört zu dem Nutzer
				{
					//Das sollte eigentlich nicht passierern
				}
				else
				{
					request.message = "Dieser Loginname ist bereits vergeben. Bitte wähle einen anderen."
					changed = false							
				}
			}
			else
			{	
				m2 = 'Loginname von Gast: '+gast+' aktualisiert von '+gast.loginname+' auf '+params.loginname
				gast.loginname = params.loginname
				changed = true
			}
		}
		if(changed)
		{
			if(!m1.equals(''))
				log.info(m1)
			if(!m2.equals(''))
				log.info(m2)
			gast.save()
			request.message = "Daten aktualisiert"
		}
	}
	catch(Exception e)
	{
		log.warning(e.toString())
	}
	generate()
	//request.gast.anzeigename = params.anzeigename
	//request.gast.loginname = params.loginname
	
	forward '/peinstellungen/portal.gtpl'
}
private void updatepasswort()
{
	//System.out.println(params)
	def gast = session.getAttribute(Konstanten.SESSION_USER)
	String palt = params.passwort
	String pneu1 = params.passwortn1
	String pneu2 = params.passwortn2
	if(palt && pneu1 && pneu2)
	{
		//System.out.println("Versuche Passwort zu ändern")
		//ist das aktuelle passwort richtig?
		String psw = DigestUtils.md5Hex(palt)
		if(psw.equals(gast.passwort))
		{
			if(pneu1.equals(pneu2))
			{
				String pswneu = DigestUtils.md5Hex(pneu1)
				gast.passwort = pswneu
				gast.save()
				request.message = 'Passwort erfolgreich geändert.'
				//Logeintrag schreiben
				String message = "UPDATE: Passwort"
				createTracer(Konstanten.TRACER_UPDATE , message)
			}
			else
				request.message = 'Die neuen Passwörter stimmen nicht überein.'
		}
		else
			request.message = 'Das aktuelle Passwort stimmt nicht.'
	}
	else
		request.message = 'Um das aktuelle Passwort zu ändern, müssen alle 3 Passwort-Felder ausgefüllt werden'
	portal()
}
private void updatezusage()
{
	def gast = session.getAttribute(Konstanten.SESSION_USER)
	System.out.println(params)
	try
	{
		if(params.anmerkungZusage != null
				&& !params.anmerkungZusage.equalsIgnoreCase('null')
				&& !params.anmerkungZusage.equals(gast.anmerkungZusage))
		{
			gast.anmerkungZusage = params.anmerkungZusage.trim()
			gast.save()
			String message = 'Der Gast '+gast.vorname+' '+gast.nachname+' hat eine Anmerkung zu seiner Zusage/Absage geschrieben:\n\n'+params.anmerkungZusage+'\n\nNachzulesen ist diese in der Detailsansicht des Gastes im Menü Gästeliste.'
			String messagex = 'UPDATE: Anmerkung zum Status '+params.anmerkungZusage
			sendMail("Anmerkung zur Zusage/Absage von "+gast.anzeigename,message, new Long(3))
			request.message = 'Anmerkung aktualisiert'
		}
		if(params.vorname != null && !params.vorname.trim().equalsIgnoreCase('') 
				&& !params.vorname.equalsIgnoreCase('null')
				&& !params.vorname.equals(gast.vorname))
		{
			gast.vorname = params.vorname.trim()
			gast.save()
			String message = 'Der Gast '+gast.vorname+' '+gast.nachname+' hat seinen Vornamen geändert\n\nNachzulesen ist diese Änderung in der Detailsansicht des Gastes im Menü Gästeliste.'
			String messagex = 'UPDATE: Name des Gastes '+params.vorname
			sendMail("Namensänderung von "+gast.anzeigename,message, new Long(3))
			request.message = 'Vorname aktualisiert'
		}
		
	}
	catch(Exception e)
	{
		log.warning(e.toString())
	}
	index()
}

private void sendMail(String headline, String message, Long typ)
{
	def myuser = session.getAttribute(Konstanten.SESSION_USER)
	if(myuser.rolle != 0) // Es ist nicht das Brautpaar selber, das seine Daten updaten will
	{
		def query = new Query(Konstanten.GAST)
		query.addFilter("feier", Query.FilterOperator.EQUAL, myuser.feier)
		query.addFilter("rolle", Query.FilterOperator.EQUAL, new Long(0))
		PreparedQuery preparedQuery = datastore.prepare(query)
	 	def entities = preparedQuery.asList( withLimit(2) )
	 	for(i in entities)
	 	{
	 		//Überprüfen, ob eine Benachrichtigung gewünscht wird
	 		if(isSendMail(typ, i.key))
	 		{
		 		//E-Mail Adresse raussuchen
	 			def query1 = new Query(Konstanten.TELEKOMM)
				query1.addFilter("gast", Query.FilterOperator.EQUAL, i.key.id)
				query1.addFilter("typ", Query.FilterOperator.EQUAL, new Long(0))
				PreparedQuery preparedQuery1 = datastore.prepare(query1)
			 	def entities1 = preparedQuery1.asList( withLimit(1) )
			 	if(entities1 && entities1.size() > 0)
			 	{
			 		def ma = entities1.get(0) 
			 		if(ma && ma.wert?.contains('@'))
			 		{
				 		log.info('Versende Mail an: '+ma.wert+' Typ: '+typ)
				 		createTracer(Konstanten.TRACER_EMAIL,'Versende Mail an: '+ma.wert+' Typ: '+typ)
				 		try
				 		{
					 		mail.send sender: Konstanten.EMAIL_NO_REPLY,
							to: ma.wert,
							subject: headline,
							textBody: message
				 		}
				 		catch(Exception e)
				 		{
				 			e.printStackTrace()
				 		}
			 		}
			 		else
			 			log.info(' Keine gültige Mailadresse gefunden ')
			 	}
			 	else
			 		log.info(' Keine Mailadresse gefunden für ' +i.vorname+' '+i.nachname)
	 		}
	 	}
	}
}
private boolean isSendMail(Long typ, Key user)
{
	def query = new Query(Konstanten.BENACHRICHTIGUNG)
	query.addFilter("gast", Query.FilterOperator.EQUAL, user)
	query.addFilter("typ", Query.FilterOperator.EQUAL, typ)
	PreparedQuery preparedQuery = datastore.prepare(query)
	Entity ben = preparedQuery.asSingleEntity()
	if(ben && ben.wert)
	{
		return true
	}
	return false
}
private void createTracer(String message)
{
	createTracer(Konstanten.TRACER_FORGOT, message);
}
private void createTracer(String type, String message) {
	try
	{
		def myuser = session.getAttribute(Konstanten.SESSION_USER);

		Tracer t = new Tracer()
	    t.ipadresse = request.getRemoteAddr()
	    t.user = myuser.key
	    t.type = type
	    t.nachricht = message
	    t.datum = Datehelper.getNow()
	    Entity e2 = t as Entity
		e2.save()
	}
	catch(Exception e)
	{
		
	}
}